/*!
 * \file calculette.h
 * \brief Header principal de la calculatrice
 * \author Matthieu.H
 * \version 1.0
 * \date 18 juin 2012
 *
 */

#ifndef CALCULETTE_H
#define CALCULETTE_H
#include "entree.h"
#include "pile.h"
#include <QString>
#include "type.h"
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <fstream>
#include "operateur.h"
#include<string>
#include<QStack>
#include "historique.h"
#include "fichier.h"

class Calculette : public QWidget{
    Q_OBJECT
    Entree gestionnaire; /*!< Objet de gestion de l'ajout de valeur*/
    Pile calcule; /*!< La pile principal de calcule*/
    Historique historique; /*!< Objet de gestion d'historique*/
    MainWindow w; /*!< Objet de gestion de l'interface graphique*/
    Fichier contexte; /*!<  Objet de gestion de contexte par fichier*/

public:
    /*!
       *  \brief Constructeur
       *  Constructeur de la classe Calculette
       */
    Calculette();

    /*!
       *  \brief Action
       *  Gestion de la saisie utilisateur
       *   \param s : Saisie Utilisateur
       */
    void Action(QString s);

    /*!
       *  \brief Clear
       *  Mise a 0 de la calculatrice
       */
    void Clear();

    /*!
       *  \brief Precedent
       *  Undo
       */
    void Precedent();

    /*!
       *  \brief Precedent
       *  Redo
       */
    void Suivant();
public slots:
    void click0(){Action("0");}
    void click1(){Action("1");}
    void click2(){Action("2");}
    void click3(){Action("3");}
    void click4(){Action("4");}
    void click5(){Action("5");}
    void click6(){Action("6");}
    void click7(){Action("7");}
    void click8(){Action("8");}
    void click9(){Action("9");}
    void clickPoint(){Action(".");}
    void clickC(){Clear();}
    void clickEval(){Action("eval");}
    void clickFraction(){Action("/");}
    void clickPlusMoins(){Action("neg");}
    void clickDollar(){Action("$");}
    void clickPuissance(){Action("pow");}
    void clickModulo(){Action("mod");}
    void clickPlus(){Action("+");}
    void clickMoins(){Action("-");}
    void clickFois(){Action("*");}
    void clickDiviser(){Action("div");}
    void clickCos(){Action("cos");}
    void clickSin(){Action("sin");}
    void clickTan(){Action("tan");}
    void clickCosh(){Action("cosh");}
    void clickSinh(){Action("sinh");}
    void clickTanh(){Action("tanh");}
    void clickFact(){Action("!");}
    void clickInverse(){Action("inv");}
    void clickLn(){Action("ln");}
    void clickLog(){Action("log");}
    void clickOk(){Action("Ok");}
    void clickAnnuler(){Action("annuler");}
    void clickUndo(){Precedent();}
    void clickRedo(){Suivant();}

    void clickSum(){Action("sum");}
    void clickMean(){Action("mean");}
    void clickDrop(){Action("drop");}
    void clickDup(){Action("dup");}
    void clickSwap(){Action("swap");}
    void clickCube(){Action("cube");}
    void clickSqr(){Action("sqr");}
    void clickSqrt(){Action("sqrt");}

signals:
    void Resultat(QString s);
    void Expression(QString s);


};

#endif // CALCULETTE_H
